package com.kevin.Code.Array;

/**
 * @author Vinlee Xiao
 * @Classname MergeSortedArray
 * @Description Leetcode 88 合并两个有序数组
 * @Date 2021/10/29 15:26
 * @Version 1.0
 */
public class MergeSortedArray {

    /**
     * @param nums1
     * @param m
     * @param nums2
     * @param n
     */
    public void merge(int[] nums1, int m, int[] nums2, int n) {

        int left = 0;
        int right = 0;
        int cnt = 0;
        while (left < m + n && right < n) {

            //如果nums[1]中的数小于nums[2]中的数 nums1中的数向后动
            if (nums1[left] > nums2[right]) {

                //向后移动一个位置
                //求出要移动的数字个数 m-left
                for (int i = right + m - 1; i >= left; i--) {
//                    System.out.println(i);
                    nums1[i + 1] = nums1[i];

                }
                nums1[left] = nums2[right];
                right++;

            }
            left++;


        }
        //nums[2]中的数还没有放入nums中
        //说明nums2中的数还没全部放完
        while (right < n) {
            //前
            nums1[right + m] = nums2[right];
            right++;
        }

    }

    public static void main(String[] args) {

        MergeSortedArray mergeSortedArray = new MergeSortedArray();
        int[] nums1 = new int[]{4, 0, 0, 0, 0, 0};
        int[] nums2 = new int[]{1, 2, 3, 5, 6};

        mergeSortedArray.merge(nums1, 1, nums2, 5);

        for (int i : nums1) {
            System.out.println(i);
        }

    }
}
